package algorithm_diagram;

import java.util.Arrays;

//算法运行时间是从增速的角度度量的，用大O表示法表示（大部分情况下时间的常量并没有什么影响）
//欧几里得算法：较大数除以较小数得第一余数，较小数除第一余数得第二余数，第一余数除第二余数得第三余数……直到余数为0，那么最后的被除数为最大公约数
public class Recursive {

    public static void main(String[] args) {
        System.out.println(sum(new int[]{1,4,7,3,8,4,8,3}));
        System.out.println(max(new int[]{1,4,7,3,10,4,8,3}));
    }

    private static int sum(int[] arr){
        if(arr.length==0){
            return 0;
        }else{
            return arr[0]+sum(Arrays.copyOfRange(arr,1,arr.length));
        }
    }

    private static int max(int[] arr){
        if(arr.length==2){
            return arr[0] > arr[1] ? arr[0] : arr[1];
        }
        int currentMax = max(Arrays.copyOfRange(arr,1,arr.length));
        return arr[0] > currentMax ? arr[0] : currentMax;
    }
}
